package com.stack;

import com.linearList.SeqList;

/**
 * @Author: linKe
 * @Date: 2022/1/1 19:30
 * @FileName: SeqStack
 * @version: 1.0
 * @Description: 顺序栈实现类（基于顺序栈）
 */
public final class SeqStack<T> implements Stack<T> {

    /**
     * 顺序表
     */
    private  SeqList<T> list;

    /**
     * 构造容量为capacity的空栈
     * @param capacity 放入栈底的元素
     */
    public SeqStack(int capacity){
        this.list = new SeqList<T>(capacity);
    }

    /**
     * 构造默认容量的空栈
     */
    public SeqStack(){
        this(64);
    }

    /**
     * 顺序栈实现
     * 基于已有顺序表
     * @return  结果
     */
    @Override
    public boolean isEmpty() {
        return this.list.isEmpty();
    }

    /**
     * 元素x入栈，空对象不能入栈
     * @param x 入栈元素
     */
    @Override
    public void push(T x) {

        //顺序表尾插入元素，自动扩充容量
        this.list.insert(x);

    }

    /**
     * 返回栈顶元素（未出栈），若栈空返回null
     * @return  结果
     */
    @Override
    public T peek() {
        //若栈空，get（i）返回null
        return this.list.get(list.size()-1);
    }

    /**
     * 出栈，返回栈顶元素：若栈空返回null
     * @return  结果
     */
    @Override
    public T pop() {
        //若栈不空，顺序表尾删除，返回删除元素
        return this.list.remove(list.size()-1);
    }

    /**
     * 重写toString
     * @return  调用顺序表的
     */
    @Override
    public String toString(){
        return this.getClass().getName()+","+this.list.toString();
    }
}
